/**
 * 
 */
package com.ubo.transform.dot;

import com.ubo.graphviz.model.graph.EGraphType;
import com.ubo.graphviz.model.graph.Graph;
import com.ubo.graphviz.model.graph.statement.Attribute;
import com.ubo.graphviz.model.graph.statement.AttributeStmt;
import com.ubo.graphviz.model.graph.statement.EdgeStatementNode;
import com.ubo.graphviz.model.graph.statement.EdgeStmtSubgraph;
import com.ubo.graphviz.model.graph.statement.Subgraph;
import com.ubo.graphviz.model.graph.statement.node.NodeStmt;
import com.ubo.graphviz.model.graph.statement.node.classNode.ClassStmt;

/**
 * @author saludegu
 * 
 */
public interface IDotVisitor<T> {

	/**
	 * Genere un graphe en langage DOT.
	 * 
	 * @param graph
	 */
	void generate(Graph graph);

	/**
	 * Genere un Noeud en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(NodeStmt stmt);

	/**
	 * Genere une classe en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(ClassStmt stmt);

	/**
	 * Genere un arc en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(EdgeStatementNode stmt);

	/**
	 * Génère un attribut en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(Attribute stmt);

	/**
	 * Génère un attributStmt en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(AttributeStmt stmt);

	/**
	 * Genere un ArcStmt en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(EdgeStmtSubgraph stmt);

	/**
	 * Genere un Sous-Graphe en langage DOT.
	 * 
	 * @param stmt
	 */
	void generate(Subgraph stmt);

	/**
	 * Génère le type de graphe.
	 * 
	 * @param eGraphType
	 */
	void generate(EGraphType eGraphType);

	/**
	 * Renvoie la valeur générée.
	 * 
	 * @return
	 */
	T getValue();

}
